15 分钟掌握 YueScript
提示
本教程提供了 YueScript 的快速概览,它是一种 Lua 的现代替代方案。YueScript 继承了 Lua 的特性,同时引入了语法糖和类似 Python 的编码风格。因为 YueScript 是 MoonScript 的方言,本教程修改自"15 分钟掌握 MoonScript",并假设你有一定的编程经验并熟悉 Lua。如果你还不熟悉 Lua,可以参考 Lua 官方文档 进行学习。
与 Lua 不同,YueScript 不使用 do
、then
或 end
,而是采用类似 Python 的缩进语法。
-- 两个横杠表示注释。注释会一直到行尾。
-- YueScript 编译成 Lua 后不会保留注释。
1. 赋值
hello = "world"
a, b, c = 1, 2, 3
hello = 123 -- 覆盖之前的 `hello`
x = 0
x += 10 -- x = x + 10
s = "hello "
s ..= "world" -- s = s .. "world"
b = false
b and= true or false -- b = b and (true or false)
2. 字面量和运算符
字面量的使用与Lua几乎一致。字符串可以在行中间换行而不需要使用\
。
some_string = "exa
mple" -- 等效于 local some_string = "exa\nmple"
字符串中可以插入变量值,这些值会先被计算,再插入到字符串中。
some_string = "这是一个 #{some_string}" -- 变为 '这是一个 exa\nmple'
2.1. 函数字面量
函数使用箭头符号来定义:
my_function = -> -- 编译为 function() end
my_function() -- 调用空函数
函数可以不使用括号来调用。如果需要优先级,可以使用括号。
func_a = -> print "Hello World!"
func_b = ->
value = 100
print "值是:#{value}"
如果函数不需要参数,可以使用 ()
或 !
来调用。
func_a!
func_b()
可以通过在箭头前加参数名的列表来为函数传递参数:
sum = (x, y) -> x + y -- 最后一个表达式将作为返回值
print sum(5, 10)
Lua 中有一种将第一个参数作为"self"对象的惯例。使用 =>
代替 ->
会自动创建一个 self
变量。@x
是 self.x
的简写。
func = (num) => @value + num
也可以在函数中使用默认参数:
a_function = (name = "某人", height = 100) ->
print "你好,我叫#{name}。\n我的身高是#{height}。"
因为默认参数在 Lua 中是在函数体内计算的,所以可以引用之前的参数:
some_args = (x = 100, y = x + 1000) -> print(x + y)